#include "beep.h"

/***********************************************************
*函数名：delay_ms
*函数功能：延时指定毫秒
*函数参数：u32 n，表示n毫秒
*函数返回值：无
*函数说明：为了避免重复定义，限当前源文件使用。
					 此函数延时不是很精确，后面用定时器代替。
************************************************************/
static void delay_ms(u32 n)
{
	int i = 168/4*200*n;
	while(i)
	{
		i--;
	}
}

/***********************************************************
*函数名：delay_us
*函数功能：延时指定微秒
*函数参数：int n，表示n微秒
*函数返回值：无
*函数说明：为了避免重复定义，限当前源文件使用。
					 此函数延时不是很精确，后面用定时器代替。
************************************************************/
static void delay_us(int n)
{
	int i = 168/4*10*n;
	while(i)
	{
		i--;
	}
}

/***********************************************************
*函数名：Beep_Init
*函数功能：对beep蜂鸣器连接的GPIO口进行初始化配置
*函数参数：无
*函数返回值：无
*函数说明：
						BEEP——PE0——通用输出推挽模式，2MHz，无上拉/下拉
************************************************************/
void Beep_Init(void)
{
	/*把GPIOE控制器的时钟打开*/
	RCC->AHB1ENR |= (1<<4);//打开GPIOE时钟

	/*用GPIO控制器配置GPIO口*/
	//模式寄存器——通用输出模式 01
	GPIOE->MODER &= ~(3<<0*2);
	GPIOE->MODER |= (1<<0*2);
	//输出类型寄存器——推挽	0
	GPIOE->OTYPER &= ~(1<<0);
	//输出速度寄存器——2MHz	00
	GPIOE->OSPEEDR &= ~(3<<0*2);
	//上拉/下拉寄存器——无上下拉	00
	GPIOE->PUPDR &= ~(3<<0*2);

	/*关闭BEEP蜂鸣器*/
	//输出数据寄存器的相应位置0，输出低电平
	GPIOE->ODR &= ~(1<<0);
}

/*******************************************************************************
*函数名：Beep_ms
*函数功能：蜂鸣器响指定毫秒
*函数参数：u32 n，响的毫秒数
*函数返回值：无
*函数说明：
********************************************************************************/
void Beep_ms(u32 n)
{
	BEEP_ON;
	TIM6_delay_ms(n);
	BEEP_OFF;
}


/***********************************************************
*函数名：Beep_Flash
*函数功能：让蜂鸣器按固定周期发出响声
*函数参数：无
*函数返回值：无
*函数说明：
************************************************************/
void Beep_Flash(void)
{
	BEEP_ON;
	delay_ms(1000);
	BEEP_OFF;
	delay_ms(1000);
}


/***********************************************************
*函数名：Beep_Lowvoice
*函数功能：让蜂鸣器按低音量发出响声
*函数参数：无
*函数返回值：无
*函数说明：占空比20%
************************************************************/
void Beep_Lowvoice(void)
{
	BEEP_ON;
	delay_us(20);
	BEEP_OFF;
	delay_us(80);
}

